/** * This file lists all the methods needed for formatting. * @requires ojs/ojcore * @requires ojs/ojvalidation * @requires knockout */ define([ "ojs/ojcore", "knockout", "base-models/validations/obdx-locale", "framework/js/constants/constants", "ojs/ojvalidation" ], function (oj, ko, BaseLocale, Constants) { /** * This file lists all the methods needed for formatting. * @class * @alias Formatter * @memberof module:baseModel */ "use strict"; var FormatterModel = function () { /** * Assign this to self. * @member {Object} */ var self = this; /** * This function is used to format the number into percent value * @function formatNumber * @instance * @memberof Formatter * @param {Float} number - This field indicates the number in decimal format which has to be formatted * @param {String} style - This field indicates the style which should be used for formatting the number, like percent or decimal * @param {Integer} [maximumFractionDigits=2] - This field indicates the maximum digits permissible after the decimal. * @param {Integer} [minimumFractionDigits=2] - This field indicates the minimum digits permissible after the decimal. * @returns {String} The formatted number e.g. 50.00%. * @example * self.formatNumber(63.2512/100, 'percent', 2, 1); * // returns "63.25%" */ self.formatNumber = function (number, style, maximumFractionDigits, minimumFractionDigits) { var formatOption, numberConverter; maximumFractionDigits = maximumFractionDigits || 2; minimumFractionDigits = minimumFractionDigits || 2; formatOption = { style: style, maximumFractionDigits: maximumFractionDigits, minimumFractionDigits: minimumFractionDigits }; numberConverter = oj.Validation.converterFactory("number").createConverter(formatOption); return numberConverter.format(number); }; /** * This function is used to format the date as per the standard format of the users locale. * It internally uses oj.Validation.converterFactory for formatting.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FormatStyle
dateFormatdd MMM yyyy
dateMonthFormatdd MMM
dateTimeStampFormatdd MMM yyyy hh:mm:ss a
dateTimehhmmFormatdd MMM yyyy hh:mm a
timeFormath:mm a
monthYearFormatMMM yyyy
dateTimeFormatdd MMM hh:mm a
timeStampFormathh:mm:ss
* @function formatDate * @memberof Formatter * @instance * @param {String} date The unformatted date string * @param {String} [dateFormat=dateFormat] The date format, if any custom format is required. * @returns {String} The formatted date is returned. * @example * self.formatDate("2017-10-03T19:43:45.695Z", "dateTimeStampFormat") * // returns "04 Oct 2017 01:13:45 AM" */ self.formatDate = function (date, dateFormat) { var dateConverter, pattern, localeDate = ko.utils.unwrapObservable(date); var conversionDate = null; if (!localeDate || localeDate === "") { return ""; } if (localeDate.length > 19 && Constants.timezoneOffset) { conversionDate = new Date(localeDate); conversionDate.setMinutes(conversionDate.getMinutes() + conversionDate.getTimezoneOffset() + (-1 * Constants.timezoneOffset)); } dateFormat = dateFormat || "dateFormat"; pattern = BaseLocale[dateFormat] || dateFormat; dateConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({ pattern: pattern }); return dateConverter.format(conversionDate ? oj.IntlConverterUtils.dateToLocalIso(conversionDate) : localeDate); }; self.formatDateVn = function (date, dateFormat) { if (date && date.length === 10 && date.includes('-') || date instanceof Function && date() && date().length === 10 && date().includes('-')) { if (date instanceof Function) { dateFormatted = date().split('-').reverse().join('/'); } else { dateFormatted = date.split('-').reverse().join('/'); } } } /** * Returns DateTimeConverter object using date format as dd MMM YYYY. * @instance * @memberof Formatter * @alias dateConverter * @type {DateTimeConverter} */ self.dateConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({ pattern: BaseLocale.dateFormat }); /** * Returns DateTimeConverter object using time format as hh:mm. * @instance * @memberof Formatter * @alias timeConverter * @type {DateTimeConverter} */ self.timeConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({ "hour": "2-digit", "hour12": false, "minute": "2-digit" }); /** * Returns DateTimeConverter object using date time format as dd MMM yyyy hh:mm a. * @instance * @memberof Formatter * @alias dateTimeConverter * @type {DateTimeConverter} */ self.dateTimeConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({ pattern: BaseLocale.dateTimehhmmFormat }); /** * This function is used to format the currency as per the standard format for a particular currency. * @instance * @function formatCurrency * @param {Float} amount This field indicates the amount in decimal format which has to be formatted * @param {String} currencyCode This field indicates the standard ISO currency code which should be used for formatting the amount * @memberof Formatter * @returns {String} The formatted amount e.g. $5,000.00 * @example self.formatCurrency(2502.25, 'GBP') //returns "£2,502.25" */ self.formatCurrency = function (amount, currencyCode, hideUnit) { var salOptions = { style: "currency", currency: currencyCode, useGrouping: true, currencyDisplay: 'symbol', pattern: hideUnit ? '###,###' : '###,### ¤', separators: { decimal: '.', group: '.' } }; if ('VND' != currencyCode) { salOptions = { style: "currency", currency: currencyCode, useGrouping: true, currencyDisplay: 'symbol', pattern: '###,###.##', separators: { decimal: '.', group: '.' } }; var salaryConverter = oj.Validation.converterFactory("number").createConverter(salOptions); return salaryConverter.format(amount) + ' ' + currencyCode; } var salaryConverter = oj.Validation.converterFactory("number").createConverter(salOptions); return salaryConverter.format(amount); }; self.formatCurrencyVN = function (strAmt) { var a = strAmt.toString(); a = a.replace(/VND/g, "").replace(/ /g, "").replace(/,/g, "").replace(/\./g, ""); var b = self.formatCurrency(a, 'VND').replace("VND", "").replace(" ", ""); return b; }; function amttowordeng(amount) { var s = amount.toString(); var th = ['', 'THOUSAND', 'MILLION', 'BILLION', 'TRILLION']; var dg = ['ZERO', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE']; var tn = ['TEN', 'ELEVEN', 'TWELVE', 'THIRTEEN', 'FOURTEEN', 'FIFTEEN', 'SIXTEEN', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN']; var tw = ['TWENTY', 'THIRTY', 'FORTY', 'FIFTY', 'SIXTY', 'SEVENTY', 'EIGHTY', 'NINETY']; s = s.replace(/[\, ]/g, ''); var x = s.indexOf('.'); if (x == -1) { x = s.length; } if (x > 15) { alert('This number is too big to convert in words'); } var n = s.split(''); var str = ''; var sk = 0; for (var i = 0; i < x; i++) { if ((x - i) % 3 == 2) { if (n[i] == '1') { str += tn[Number(n[i + 1])] + ' '; i++; sk = 1; } else if (n[i] != 0) { str += tw[n[i] - 2] + ' '; sk = 1; } } else if (n[i] != 0) { str += dg[n[i]] + ' '; if ((x - i) % 3 == 0) { str += 'HUNDRED '; } sk = 1; } if ((x - i) % 3 == 1) { if (sk) str += th[(x - i - 1) / 3] + ' '; sk = 0; } } if (x != s.length) { var y = s.length; str += 'POINT '; for (var i = x + 1; i < y; i++) { str += dg[n[i]] + ' '; } } if (str != '') { str = str.toLowerCase() + 'only'; } else { str = str.toLowerCase(); } var strWord = str; var strWordFirst = strWord.substr(0, 1).toUpperCase() + strWord.substr(1); return strWordFirst; }; var chu = "kh\u00f4ng m\u1ed9t hai ba b\u1ed1n n\u0103m s\u00e1u b\u1ea3y t\u00e1m ch\u00edn".split(" "), donvi = ";m\u01b0\u01a1i;tr\u0103m;ngh\u00ecn;m\u01b0\u01a1i;tr\u0103m;tri\u1ec7u;m\u01b0\u01a1i;tr\u0103m;t\u1ef7;m\u01b0\u01a1i;tr\u0103m;ngh\u00ecn t\u1ef7;m\u01b0\u01a1i;tr\u0103m;tri\u1ec7u t\u1ef7;m\u01b0\u01a1i;tr\u0103m;t\u1ef7 t\u1ef7;m\u01b0\u01a1i;tr\u0103m;".split(";"); function converttochar(b) { var unitWord = b%1000 === 0? ' \u0111\u1ED3ng ch\u1EB5n':' \u0111\u1ED3ng'; for (var c = "", c = b + "", b = c.length, a = "", d = a = "", f = "", a = "", e = b; 0 < e; e--)a = tach3(c.substr(b - e, b)), "null" != a ? (f = "" == a ? f + a : f + a + " " + donvi[e - 3] + " ", e -= 2) : (a = c.substr(b - e).substr(0, 1), "1" == a && "m\u01b0\u01a1i" == donvi[e - 1] && 1 < e ? d = a = "m\u01b0\u1eddi" : (a = "1" == a ? "m\u01b0\u01a1i" != donvi[e] ? "m\u1ed9t" : "m\u01b0\u1eddi" == d ? " m\u1ed9t" : e == b ? "m\u1ed9t" : "m\u1ed1t" : "5" == a ? "m\u01b0\u01a1i" != donvi[e] ? "n\u0103m" : 0 == f.length ? "n\u0103m" : " l\u0103m" : "m\u01b0\u1eddi" == d ? "0" == a ? "" : "5" == a ? " l\u0103m" : " " + chu[a] : "0" == a ? "" : chu[a], d = " "), f += a, "m\u01b0\u1eddi" != d && (f = f + " " + donvi[e - 1] + " ")); return f.substr(0, 1).toUpperCase() + f.substr(1) + unitWord; } function tach3(b) { var c = "null"; if (0 == b.length % 3) { var a = b.substr(0, 3), d = a.substr(0, 1), b = a.substr(1, 1), a = a.substr(2, 1); "0" == d && "0" == b && "0" == a ? c = "" : "0" == d && "0" == b && "0" != a ? c = "l\u1ebb " + chu[a] : "0" == d && "0" != b && "0" == a ? (c = "kh\u00f4ng tr\u0103m ", c = "1" == b ? c + "m\u01b0\u1eddi" : c + chu[b] + " m\u01b0\u01a1i") : "0" == d && "0" != b && "0" != a ? (c = "kh\u00f4ng tr\u0103m", d = chu[a], "n\u0103m" == d && (d = "l\u0103m"), c = "1" == b ? c + " m\u01b0\u1eddi " + d : "1" == a ? c + " " + chu[b] + " m\u01b0\u01a1i m\u1ed1t" : c + " " + chu[b] + " m\u01b0\u01a1i " + d) : "0" != d && "0" == b && "0" == a ? c = chu[d] + " tr\u0103m" : "0" != d && "0" == b && "0" != a ? c = chu[d] + " tr\u0103m l\u1ebb " + chu[a] : "0" != d && ("0" != b && "0" == a) && (c = chu[d] + " tr\u0103m", c = "1" == b ? c + " m\u01b0\u1eddi" : c + " " + chu[b] + " m\u01b0\u01a1i") } return c }; self.getAmountInWords = function (amount, ccy) { console.log(ccy) var language = sessionStorage.getItem("user-locale") || document.getElementsByTagName("html")[0].getAttribute("lang") || "en"; if (language === 'en') { //eng return amttowordeng(Number(amount).toString()); } else if (language === 'vn') { //vn return converttochar(Number(amount).toString().replace(/VND/g, "").replace(/ /g, "").replace(/,/g, "").replace(/\./g, "")); } }; self.resizeBase64Img = function(base64, width, height) { var canvas = document.createElement("canvas"); canvas.width = width; canvas.height = height; var context = canvas.getContext("2d"); var deferred = $.Deferred(); var img = new Image(); img.onload = function() { context.scale(width/this.width, height/this.height); context.drawImage(this, 0, 0); deferred.resolve(canvas.toDataURL()); }; img.src = base64; return deferred.promise(); }; }; return FormatterModel; });